home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / ftp_func.inc < prev    next >
Text File  |  2005-03-31  |  2KB  |  93 lines

  1. # -*- Fundamental -*-
  2. #
  3. # (C) 2002 Michel Arboi <arboi@alussinan.org>
  4. # $Revision: 1.22 $
  5.  
  6. function ftp_close(socket)
  7. {
  8.   send(socket:socket, data:'QUIT\r\n');
  9.   close(socket);
  10. }
  11.  
  12. function get_ftp_banner(port)
  13. {
  14.  local_var lines, sb, banner, soc, str;
  15.  
  16.  lines = 0;
  17.   sb = string("ftp/banner/", port);
  18.   banner = get_kb_item(sb);
  19.   if (banner) return(banner);
  20.   if ( get_kb_item("ftp/" + port + "/broken") ) exit(0);
  21.  
  22.   if (! get_port_state(port)) return (0);
  23.   soc = open_sock_tcp(port);
  24.   if(!soc) {
  25.     set_kb_item(name:"ftp/" + port + "/broken", value:TRUE);
  26.     return NULL;
  27.     }
  28.   banner = ftp_recv_line(socket:soc);
  29.   ftp_close(socket: soc);
  30.   if ( ! banner ) 
  31.   {
  32.     set_kb_item(name:"ftp/" + port + "/broken", value:TRUE);
  33.     return NULL;
  34.   }
  35.   if ( defined_func("replace_kb_item") )
  36.     replace_kb_item(name: sb, value: banner);
  37.  else
  38.     set_kb_item(name: sb, value: banner);
  39.   return(banner);
  40. }
  41.  
  42.  
  43. function ftp_recv_line(socket)
  44. {
  45.  local_var    n, r;
  46.  n = 0;
  47.  r = recv_line(socket:socket, length:65535);
  48.  if(strlen(r) < 4) 
  49.   return(r);
  50.   
  51.  while(strlen(r) > 3 && r[3] == "-")
  52.  {
  53.   n ++;
  54.   r = recv_line(socket:socket, length:65535);
  55.   if(n > 255)
  56.    return(NULL);
  57.  }
  58.  return(r);
  59. }
  60.  
  61.  
  62. function ftp_recv_listing(socket)
  63. {
  64.  local_var    n, r, buf;
  65.  n = 0;
  66.  r = recv_line(socket:socket, length:65535);
  67.  buf = r;
  68.  while(strlen(r))
  69.  {
  70.   n ++;
  71.   if(n > 4096)
  72.    return(NULL);
  73.   r = recv_line(socket:socket, length:65535);
  74.   buf += r; 
  75.  }
  76.  return buf;
  77. }
  78.  
  79. function ftp_recv_data(socket, line)
  80. {
  81.  local_var buf, bytes, min;
  82.  
  83.  if(line != NULL )
  84.  {
  85.   bytes = ereg_replace(pattern:"^150.*\(([0-9]*) .*\)", string:line, replace:"\1");
  86.  }
  87.  
  88.  if(!bytes){ bytes = 8192; min = 1; }
  89.  else { min = int(bytes); bytes = int(bytes); }
  90.  
  91.  return recv(socket:socket, min:bytes, length:bytes);
  92. }
  93.